Many types of applications exist that run on computer systems. System software and application software are two types of computer-based applications. System software manages and controls computer hardware so that application software can perform tasks. Examples of system software include operating systems and device drivers. Application software applies the capabilities of computer systems to tasks. Examples of application software include media players, word processors, and spreadsheets.
Some applications incorporate complex logic that handles many conditions and exceptions. For example, an application or group of applications may manage a cluster of servers that host a website. Such applications may include complex logic to manage the serving of content requested from the websites, to perform the pushing of software updates to user computers, to handle error conditions, and/or to perform other functions for the websites. In some cases, application complexity has grown large enough to make the applications challenging to maintain.
The growing complexity of applications has led to the inclusion of computer code in applications that is difficult to read, to understand, to modify, and to enhance. Such applications may be difficult to fully test due to many variables and conditional outcomes. Furthermore, this complexity has resulted in processing that is hard to audit for correctness. For example, when evaluating application performance, it may difficult to determine why a particular function was performed, to determine what is supposed to happen when a particular combination of events occur, and to determine further logical outcomes of processing performed by the application. Ways of reducing the complexity of applications are desired so that the resulting problems may be reduced or eliminated entirely.